added a check which avoids processing updates on bin_window and scrolling
authorKristian Rietveld <kris@gtk.org>
Sun, 19 Jun 2005 19:22:46 +0000 (19:22 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Sun, 19 Jun 2005 19:22:46 +0000 (19:22 +0000)
2005-06-19  Kristian Rietveld  <kris@gtk.org>

* gtk/gtktreeview.c (gtk_tree_view_clamp_node_visible): added a
check which avoids processing updates on bin_window and scrolling
if the node is already visible. (#170600, Billy Biggs).

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gtk/gtktreeview.c

index 7da0dce54ef01054588ac5458e75b5eac910a831..4a7ef3697378014c004a7c8816a93ffbd2def672 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-06-19  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeview.c (gtk_tree_view_clamp_node_visible): added a
+       check which avoids processing updates on bin_window and scrolling
+       if the node is already visible. (#170600, Billy Biggs).
+
 2005-06-19  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreeview.c (validate_visible_area): only keep the
index 7da0dce54ef01054588ac5458e75b5eac910a831..4a7ef3697378014c004a7c8816a93ffbd2def672 100644 (file)
@@ -1,3 +1,9 @@
+2005-06-19  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeview.c (gtk_tree_view_clamp_node_visible): added a
+       check which avoids processing updates on bin_window and scrolling
+       if the node is already visible. (#170600, Billy Biggs).
+
 2005-06-19  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreeview.c (validate_visible_area): only keep the
index 7da0dce54ef01054588ac5458e75b5eac910a831..4a7ef3697378014c004a7c8816a93ffbd2def672 100644 (file)
@@ -1,3 +1,9 @@
+2005-06-19  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeview.c (gtk_tree_view_clamp_node_visible): added a
+       check which avoids processing updates on bin_window and scrolling
+       if the node is already visible. (#170600, Billy Biggs).
+
 2005-06-19  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreeview.c (validate_visible_area): only keep the
index 28e12189132adc1f301324adb031c377b5687de0..e3bf7069e3f84738bce1aceb0c15ecfa7915f46c 100644 (file)
@@ -4561,7 +4561,7 @@ validate_row (GtkTreeView *tree_view,
   gboolean retval = FALSE;
   gboolean is_separator = FALSE;
   gint focus_pad;
-      
+
   /* double check the row needs validating */
   if (! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_INVALID) &&
       ! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_COLUMN_INVALID))
@@ -7828,13 +7828,22 @@ gtk_tree_view_clamp_node_visible (GtkTreeView *tree_view,
                                  GtkRBTree   *tree,
                                  GtkRBNode   *node)
 {
+  gint node_dy, height;
   GtkTreePath *path = NULL;
 
   if (!GTK_WIDGET_REALIZED (tree_view))
     return;
 
-  path = _gtk_tree_view_find_path (tree_view, tree, node);
+  /* just return if the node is visible, avoiding a costly expose */
+  node_dy = _gtk_rbtree_node_find_offset (tree, node);
+  height = ROW_HEIGHT (tree_view, GTK_RBNODE_GET_HEIGHT (node));
+  if (! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_INVALID)
+      && node_dy >= tree_view->priv->vadjustment->value
+      && node_dy + height <= (tree_view->priv->vadjustment->value
+                              + tree_view->priv->vadjustment->page_size))
+    return;
 
+  path = _gtk_tree_view_find_path (tree_view, tree, node);
   if (path)
     {
       /* We process updates because we want to clear old selected items when we scroll.